package com.tedu.API.io;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * listFiles(接口：Filter)    重载
 * 作用：按照"指定规则"获取对应文件/文件夹
 * Filter接口--专门给listFiles方法提供：过滤文件夹或者文件【指定规则】
 * accept()从每个File的文件中判断，拿到【集体逻辑】的文件夹
 * 需求：获取 API 项目下 所有子项【文件和文件夹】  获取src文件
 *     指定规则：验证是S开通就是src
 * 作业2：获取FileFilter接口按照匿名内部类方式实现，功能如上
 */
public class FilterAPI {
    public static void main(String[] args) throws IOException {
        //主方法：./ 路径指定根级
        //1.创建File文件类：获取当前 API 文件夹 路径：./API
        File file=new File("."+File.separator+"API");
        System.out.println(file.getCanonicalPath());
        //4.创建FileFilter接口对象---无法直接创建：实现类--实现--接口【创建】
//        MyFilter my=new MyFilter();
        //2.获取文件夹下的所有"子项：文件夹下包括所有文件和文件夹"
        FileFilter ff=new FileFilter() {
            public boolean accept(File pathname){
                String name=pathname.getName();
                System.out.println("过滤出来文件夹名字是1："+name);
                return name.startsWith("S");
            }
        };
        File[] subs=file.listFiles(ff);
        //3.打印子项下所有名字
        for(int i=0;i<subs.length;i++){//i 下标 从0开始
            System.out.println("所有文件和文件夹名："+subs[i].getName());
        }




    }
    //单元测试：./ 路径指定父级
//    @Test
//    public void test01() throws IOException {
//        File file=new File("."+File.separator);
//        System.out.println(file.getCanonicalPath());
//    }
}

//创建实现类--实现--FileFilter接口--对象创建
class MyFilter implements FileFilter {
    //accept(File pathname)
    //传入参数：File pathname---获取所有需要过滤文件
    //作用：添加过滤条件，将获取到的所有需要过滤的文件，
    // 逐一过滤【条件：规则--开发者指定】，条件满足返回true，条件不满足反之
    public boolean accept(File pathname) {
        //添加规则：文件或者文件夹是 s 开头 -- 过滤
        //①获取所有的文件夹名字
        String name=pathname.getName(); //文件夹： src 字符串
        //②过滤以 s 开头的文件夹
        // 字符串方法：startWith("s") 返回值：boolean
        // 作用：验证字符串首字符是不是匹配字符,如果匹配返回true  反之false
        //③打印过滤出现字符串
        System.out.println("过滤出来文件夹名字是："+name);
        return name.startsWith("A");


    }
}
